package com.bytezero.genericity;

import org.junit.Test;

import java.util.*;

/**
 * @author Bytezero1·zhenglei!    Email:420498246@qq.com
 * create  2021-11-22 11:47
 *   泛型的使用
 *   1.jdk5.0新特性
 *
 *   2.在集合中使用泛型:
 *   总结:
 *   1.集合接口或集合类在jdk5.0时都修改为带泛型的结构
 *   2.在实例化集合类时,可以指明具体的泛型类型
 *   3.指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(比如:方法 构造器 属性等..)使用到类的泛型位置,
 *   都指定为实例化的泛型类型  比如 :add(E e) -->实例化以后:add(Integer e)
 *   4.注意点:泛型的类型必须是类,不能是基本数据类型,需要用到基本数据类型的位置,拿包装类来替换
 *   5.如果实例化时,没有指明泛型的类型,默认类型为 java.lang.Object类型
 */
public class genericityTest {

    //在集合中使用泛型之前的情况
    @Test
    public  void test1(){
        ArrayList list = new ArrayList();

        //需求：存放学生的成绩
        list.add(18);
        list.add(28);
        list.add(38);
        list.add(48);
        list.add(58);

        //问题一：类型不安全
//        list.add("Tom");    //类型错误

        for(Object score : list){

            //问题二   强转时 ，可能出现ClassCastException
            int stuScore =  (Integer) score;

            System.out.println(stuScore);

        }




    }


    //在集合中使用泛型的情况
    @Test
    public  void test02(){
        ArrayList<Integer> list  = new ArrayList<Integer>();

        list.add(18);
        list.add(18);
        list.add(18);
        list.add(18);
        list.add(18);
        list.add(18);

        //编译时 就会进行类型数据检查  保证数据的安全
//        list.add("Tom");

        //方式一：
//        for(Integer score : list){
//            //避免了强转的操作
//            int stuScore = score;
//
//            System.out.println(stuScore);

        //方式二
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
            int stuScore = iterator.next();
            System.out.println(stuScore);
    }
    }
    //在集合中使用泛型的情况,以HashMap为例
    @Test
    public void test3(){
        Map<String,Integer> map = new HashMap<String, Integer>() ;

        map.put("Tom",89);
        map.put("jer",59);
        map.put("jon",29);
        map.put("andi",99);

//        map.put(123,"asf");
        //泛型嵌套
       Set<Map.Entry<String,Integer>>entry = map.entrySet();
       Iterator<Map.Entry<String,Integer>> iterator = entry.iterator();

       while (iterator.hasNext()){
           Map.Entry<String, Integer> entry1 = iterator.next();
           String key = entry1.getKey();
           Integer value = entry1.getValue();
           System.out.println(key + "-----" + value);
       }

    }




}




